id: 2851456572 | 楼主:dodoufatch | 返回首页
id: 45522916395
1L | 作者:dodoufatch | 发布于 2014-02-06 08:59
9:30开坑
此宝典适用于任何版本的Mf引擎(mFe,W10,RE,MW1.0),因为他不教代码思路只教逻辑
第一次编宝典资源有限。。。
希望帮到大家做关
(MMF帮助文件真心看不懂)
可以站喽啦
9:30准时开发文字+录制视频
id: 45525828653
2L | 作者:无视我…… | 发布于 2014-02-06 10:19
肿么还不开始。。。
id: 45526559096
3L | 作者:dodoufatch | 发布于 2014-02-06 10:35
第一章节 认识MMF,掌握MMF
1- 打开mfa
mfa是mmf文件的后缀名,exe则是mmf成品关卡的后缀名。由于MF引擎都比较深奥,所以还会有各种各样的mfx(拓展功能包文件)。例如有了timex.mfx就可以在MMF里使用TIME X事件。
我们先下载一个MF引擎,会发现里面有几个mfx。
怎么破呢?
把mfx放到你安装目录文件夹的Extension文件夹中,以及安装目录data\runtime文件夹中
安装目录默认为(C:\Program Files\MUITLMEDIA FUSHION 2 DEVELOPER)
然后,就可以兴奋地打开MFA了。
Q:MFA无法直接打开
A:先打开MMF,在点击打开-***.mfa就可以啦!
2- 认识界面
MMF里有很多界面哦。
最上面的是菜单栏,提供各种各样的服务。菜单栏下面的则全是快捷菜单、快捷功能以及视图、网格等编辑工具。
左侧的workspace toolbar则是显示frame的场地,propoties是物品属性栏,用于物品的初始化设定。工作区左边的有很多文件的地方是文件库。
一般来说,MMF的播放界面像素为640*640
id: 45526832196
4L | 作者:dodoufatch | 发布于 2014-02-06 10:41
3- 物品
MMF的物品五花八门,有对话框、选择框、按钮等等的一大堆东西。我们在MF引擎中比较常用的有Active(可设定动作)、backdrop(背景)以及Counter(计数器)
Active是可以在event中编辑、调用并设定的物品,一般分为可见与不可见。可见的主要有怪物、马里奥、终点等要设定事件的动态物品以及静态物品,不可见的一般用来设定重叠判定、变量判定等一大堆的代码判定。
backdrop一般为背景,不能在event中调用。W10E为大家提供了一个渐变背景,单击蓝天,然后修改左侧propoties栏中的两个颜色值,就可以做出不同的渐变色背景
counter的用法与value类似,用于计数。比如counter方向用于记录马里奥当时的方向,然后设定一个判定就能做出一些设计。
id: 45527124839
5L | 作者:dodoufatch | 发布于 2014-02-06 10:48
4-插入物品、移动物品、复制物品、克隆物品、删除物品、编辑物品
首先是插入物品,在空白地方点几下就会出现一个菜单栏,单击“insert object”就会出现很多类型,一般我们点击Active,然后一个Active就生成了(默认为绿色菱形)
我们在左图位置处可以设定点格,让我们的关卡更整齐。
首先点最左边的那个,然后输入width32,height32(熟练了之后可以改成16),点OK,在点击第3个。现在移动active是不是很整齐啊?!
利用Ctrl+c与Ctrl+v进行复制粘贴。注意粘贴会有个十字架,确定该物品粘贴后的位置。也可以右键复制粘贴。
右键该物品,点击clone object就可以克隆一份一模一样属性的物品,只不过在调用事件时这两个事件是分开调用的。
使用快捷键delete(不是backspace! 是方向键上面的delete,先要打开Scroll Lock)删除物品。物品删除后,关联着的所有event将被删除
双击打开该物品的编辑区,进行物品编辑。这部分内容将在第二章节细讲。
id: 45527382204
6L | 作者:dodoufatch | 发布于 2014-02-06 10:53
5- 锁定物品
右键背景,点击Lock可以对其进行锁定哦!
我们为了方便大块的复制粘贴,一般会对更改好的背景进行锁定,这样就使它不会被移动、编辑,方便大块的复制粘贴关卡内容。
不过要注意,Lock以后不能Unlock,要谨慎!
6- Frame的概念
MFA是由诸多界面组成的,每个界面相对独立,有自己的object与event,我们把这种相对独立又有诸多关联的界面称之为Frame
有些物品与数据是全局数据(例如Global Value),他们在整个MFA中通用,因此在其中一个frame更改后另一个frame也会自动更改。
每个active也有自己的frame。双击板栗仔,看到板栗仔的动态由许多frame构成,这个frame则不是界面,而是一个显示动态物品其中一个时间段形态的画面,不会相对独立。
id: 45527689497
7L | 作者:dodoufatch | 发布于 2014-02-06 11:00
7- 物品大小与判定区域
每个物品有自己的大小。例如;落石很大,但是判定区(有效区)很小。双击开来之后,为黑白相间格子区域为无效判定区域。只有当一个物品碰到有效判定区域时才会进行重叠事件。
8- 焦点
焦点反应了一个物品的方位点。例如板栗身高32像素,位于X为320的地面上,如果他的焦点在头上,则他此时的X POSITION为320-32=298,如果焦点在脚上,则此时的X POSITION为320。
双击开一个active,在他的左侧找到这个就可以编辑焦点(一般默认为左上方)
9- 编辑物品大小
在上图中,最下面一行的第一个(就是眼睛左边的左边那个)单击一下,就可以更改物品的长度和宽度了。MF里面一般都是16的倍数为了方便移动与编辑。
我们还可以先在工作区单击一个active,过1-2秒后再单击一下,就会出现,通过点击四面八方的点来编辑物品大小。编辑时,最好打开可见点格,弄成16的倍数,方便拖动。
id: 45541747045
8L | 作者:马里奥X7 | 发布于 2014-02-06 15:59
为什么没我的mfeeb v1.11的教程宝典?
id: 45542553368
9L | 作者:nmnmoooh | 发布于 2014-02-06 16:17
好物先顶
id: 45544414666
10L | 作者:Weapon123hsy | 发布于 2014-02-06 16:56
@ZHL_64 我们的希望就在这贴上了…
id: 45554135748
11L | 作者:dodoufatch | 发布于 2014-02-06 20:07
明天上视频哦
id: 45555936151
12L | 作者:大爷23大买卖吗 | 发布于 2014-02-06 20:37
@happy lee_12
id: 45565816884
13L | 作者:syzxchulun | 发布于 2014-02-06 23:09
写的基础,适合初学者,很好,先加精品!
id: 45582210501
14L | 作者:把僵尸炖了 | 发布于 2014-02-07 10:01
可以解锁的说(unlock)
id: 45584560938
15L | 作者:dodoufatch | 发布于 2014-02-07 10:52
视频在审核,下午上。
继续昨天的课题。
9-物品种类
每个物品都有自己的type。
我们找一个怪物,在左侧的propoties(属性)菜单下点这个,看到如下界面
这个是物品运动movement的属性。
首先,每个物品可以有多种运动方式(movement)。每种运动方式的type以及speed以及重力等等都不一样!
当前选择的一种是默认也是初始的一种运动方式(在这里为运动#1)有些物体(例如上涨岩浆)有两种运动方式,一个是运动#!一个是#2分别代表上涨和静止的。运动方式可以在关卡中途通过代码来切换。
下面普及几种常用的运动方式:(type)
Static 静态物品
Platform 平台等,一般有重力,可以设置speed(速度)以及重力
Bouncing Ball 能反弹的物品,常见的有普通运输桥等等
Path 按照路径运动,一般有上涨岩浆的动态
id: 45584752471
16L | 作者:dodoufatch | 发布于 2014-02-07 10:56
11- 组
物品可以自定义加入其中一个组(group),方便在event中管理。
例如怪物都是一个组,这样在event中,只要马里奥碰到这个组的一个成员就会进行判定。
组是可以在属性栏中设置的,如下
板栗仔在这个引擎中加入了group.bad组以及24组。我们单击Qualifier右边的框框,点击Edit,看到组的详细情况
使用Add可以让他加入新的组。
关于组在代码中的具体应用会在第三章节细讲。
id: 45585039888
17L | 作者:dodoufatch | 发布于 2014-02-07 11:02
12- 初始变量值
变量值(Alterable Value)是相对于每一个个体物品设定的。每一个个体物品都有自己的Alterable Value。我们可以为一种物品设定初始的变量值,这样这种物品的每一个个体一开始的都是这样的一个变量值。
我们以KOPPA为例来看看。
单击KOPPA,然后再属性栏中找到这个
可以看到,KOPPA基本上都被初始化定义成了0.
这个KOPPA相当可怜只有3格血。通过初始化设定还可以为变量重命名。另外初始化设定不会在Always事件中调用,只会在Frame开始时执行一次。
Global Value(全局变量)则在一个Application的开头进行定义。
单击标题在下面找到这个
这里就是定义Global Value的地方了。
值得注意的是,Global Value在每个frame都通用,也就是每frame开头不再初始定义。
id: 45585250934
18L | 作者:dodoufatch | 发布于 2014-02-07 11:06
13- 更改初始属性值
我们还是在刚才Global Value的地方找到这个,然后看到Player...下面有个Lives,可以更改关卡初始的生命。
另外我们点击Default Controls更改初始键位。其中每个叉叉代表一个Player(当然这是和event有关系的,我们改第一个叉叉即可),相应的Button1、2则代表event中的fire1、fire2,分别为跳跃和加速子弹。更改这个可以使关卡所有地方的Button1、2发生改变!
注意!在关卡标题处编辑的属性均为全局属性,编辑一定要谨慎,否则整个application都会毁掉。
如果下载了MMF的HWA版本,在上面的Display Mode里可以选择Direct3D,运行会更加流畅
id: 45585581359
19L | 作者:dodoufatch | 发布于 2014-02-07 11:13
14- 状态(animation)
animation,对于event编的多的人应该超级熟悉。没错,一个animation反应了一个物体该时的特点,他不同于Movement Type,他是在特定地方进行动态场面编辑的状态。也就是,animation是一个动态形象,而movement是一个运动形象。
我们来看看马里奥的状态。
双击马里奥,看到左下角他有很多状态。
选择walking并点击右边的DIRECTION OPTIONS。
我们看到LOOP被允许了,也就是Frames中的动态场面是循环播放的,而且播放速度是60FPS。而一旦马里奥停止走动,event就会把animation切换到Stopped,马里奥就会变为“静态”(Stopped中只有一个Frame)
我们还可以看到Walking状态中有两个方向被打上了实心。(就是三点和九点的方向)
animation右边那个类似时钟的东西是方向(direction)。我们点击左边那个实心,发现此时马里奥的动态是向左的。也就是WALKING一共包含两个方向。同样方向也可以用event来控制。
关于状态的代码会在后面讲到
id: 45585805160
20L | 作者:dodoufatch | 发布于 2014-02-07 11:18
15- 制作关卡
制作关卡相信对于大家来说很简单吧!
首先复制几份渐变背景,更改渐变颜色(参照上面更改)做好新的背景,或者找好素材背景,然后Lock好。做好地面、怪物等东西,最后铺上终点就可以了。有些东西不同引擎是不同的,这里我也无法一一讲了。祝大家做关愉快!
好了,第一章节向大家介绍了一些有关MMF的基础常识知识。更深入的MMF,需要大家揭开event list editor的面纱去探索。下面我们就开始新的旅程!
id: 45588888583
21L | 作者:dodoufatch | 发布于 2014-02-07 12:20
视频上传失败重传
id: 45595112734
22L | 作者:dodoufatch | 发布于 2014-02-07 14:26
今天基本在介绍属性栏
id: 45637261433
23L | 作者:dodoufatch | 发布于 2014-02-08 08:54
各位抱歉,今天要晚一点开始连载了,最早也得下午,望原谅
id: 45643648645
24L | 作者:dodoufatch | 发布于 2014-02-08 11:25
征求意见—大家希望接下来讲代码往哪方面先讲!
id: 45655999335
25L | 作者:dodoufatch | 发布于 2014-02-08 15:39
今天的开始啦!
第二章节- 关卡后台事件入门
第一节 event
event(事件,也就是代码)是一个frame必不可少的一部分,控制了frame的基本运行与各种动作。event通常从event list editor进去。
我们单击一个frame,右键然后点击event list editor即可。
event editor是event list editor的检索版本。
一个标准的event由以下几部分组成:
主条件(Main Condition)
副条件1 (Extra Condition 1)
副条件2 (......)
.........
副条件N(Extra Condition N)
动作1 (Action 1)
.......
动作N (Action N)
一般来说,主条件是一个event的最主要的判断,后面可以没有副条件。
event的条件一旦激活,里面的动作也会相应的执行。
我们来看一个例子来分析:
Mario is Out of the Play Area
Music: Play Sample Mario-Win
在这句话中Mario is Out Of the Play Area是条件(具体的语法会在之后学),也就是这个条件成立后,里面的Play Sample Mario-Win也会相应地执行。
我们还可以发现,每个动作都关联着一个Active物品。
MMF有内置的几个Active物品。我们来认识一下:
1. Special Events(就是那个有问号的像电脑一样的)复杂事件,通常为全局设定以及组设定用
2. Music:一个喇叭,用于播放与控制音乐
3. Storyboard Control:黑白相间的东西,主要控制关卡的滚屏以及各种帧的调换
4. Timer:计时器,主要用于every语句
5. Keyboard and Mouse:键盘与鼠标事件
6. Player 1、2、3、4:主要用于游戏的用户操作判定,每个Player都有不同的功能
另外,加入了一些MFX文件中还可以有更多的功能
例如,加入了Timex.mfx后就可以调用TIMEX的相关事件
id: 45656304237
26L | 作者:dodoufatch | 发布于 2014-02-08 15:46
第二节- 坐标与像素
像素,顾名思义。(大家自己去思吧)
像素就是一个在屏幕中显示图片的基本单位,是一个很小的正方形显示区。MF引擎中的砖块为32*32像素,滚屏显示区为640*640像素。也就是长度如果超出640像素就会开始滚屏。
坐标(Position)反映了一个物体的绝对位置与相对位置。
坐标一般分为X坐标与Y坐标
X坐标是横向的,反应物体的左右。设一点X坐标为100,那么如果另一个点在这个点右边且距离他100像素,那么另一个点坐标就为100+100=200。
X坐标是越右越大。
Y坐标是纵向的,反应物品的上下。设一点Y坐标为100,一个人的焦点位于这个点的下方100像素,那么这个人的坐标为100+100=200
Y坐标越下越大。
利用两个坐标就可以反映一个物体的位置。例如屏幕左上角坐标为(0,0)
物体的坐标通常是取决于他的焦点(Action Point)
相对坐标是绝对坐标的升级版
设一个点A位于(10,10),另一个点B位于(20,20),那个另一个点B的坐标可以表示为:
(10,10) from 点A
点A坐标则可以表示为:
(-10, -10)from 点B
相对坐标的表示方法通常为:
(比较者X坐标减去被比较者X坐标,比较者Y坐标减去被比较者Y坐标)from 被比较者名称
id: 45656774136
27L | 作者:dodoufatch | 发布于 2014-02-08 15:56
3- 冲突判定
现在,我们需要自己动手,做出你的第一个代码判定事件
冲突判定分为Collision Test与Overlapping Test。一个为触发型为红色,另一个为持续性。当A碰到B时,使用Collision Test,则时下面的代码判定只执行一遍。使用Overlapping,则会不断的执行直到A离开B。
Collision语法的一般形式为:
Collision between A物品 and B物品
我们先来做一个Collision判定。
首先回到frame editor,在灰色区域右键并insert object,选择Active插入一个动作,放到马里奥能碰得到的地方(一开始不要碰到!)并右键重命名为SXBK
打开event list editor,拉到最下面,看到有一个New Condition。我们点击它,看到一大堆图片。
W10E,MFEEB,MFE版本请点击那个制造马里奥的黑色方框(即起点框),RE版本请点击放置起点时马里奥后面的那个东西(不是滚屏的东西,是起点)
右键单击它后,看到菜单栏,移到COllision处,然后点击Another Object,然后又重新让你选择了,你左键单击刚刚创建的那个Active。(如果有很多这样的菱形就移到上面,看看哪个叫SXBK)
这样,你就华丽的创造了一行条件代码:Collision Between Mario and SXBK
下面单击insert your action here为该条件设定结果,我们右键单击那个像国际象棋棋盘一样的东西,然后选择next Frame(前提是你关卡的那个frame后面还要有一个frame,如果没有可以选择Previous Frame)。OK了!
测试关卡,马里奥走到菱形的时候界面就换了。
OK。在这里呢,overlapping也可以用,也是一样的用法,但是做大型关卡时,可能两者效果相差很多哦!
id: 45656980177
28L | 作者:dodoufatch | 发布于 2014-02-08 16:00
4- 初始化执行型代码
接下来我们来研究几个初始化执行型代码。先做介绍:
Start of Frame:在关卡开始的时候执行,一般用作初始化,只执行一次。
End of Frame:在关卡结束或者死亡时执行,一般做收尾,只执行一次。
Always:如没有其他限制条件,则整个关卡运作时一直连续不断地执行下面的代码。
Never:从不执行下面的代码
Only One Action When Event Loops:一般有其他的限制条件。意思为,当其他的条件成立时,以下的代码只执行一次。
Run this event once:如没有其他限制条件可以当作Start of Frame看。如果有其他的限制条件,则为当条件成立时,以下的代码被执行一次,然后就无论条件成不成立都不再执行。
id: 45657261806
29L | 作者:dodoufatch | 发布于 2014-02-08 16:06
5- 自己制作初始化执行型代码
首先,我们再找一块空地,点击new condition,插入条件
我们选择第一个类似电脑一样的东西,右键,然后点击Always,就创造好了一个Always条件。
然后单击下面的Insert Your Action Here,在选择界面中选择Player 2
右键他,选择Score-Set Score,输入60,然后点击OK,我们就创建好了以下代码:
Always
Player 2: Set Socre to 60
然后保存关卡,测试一下看看,是不是金币数量为60而且无论如何也不会改变呢?无论吃多少金币,永远保持60不变。
我们再右键单击刚刚创建好的那个Always,选择Replace(修改),点击第三个物品(喇叭右边那个),选择Start of FRAME,就会发现代码被改成了:
Start of Frame(红色):
……………………
再次运行,会发现一开始还是有60个金币,只不过如果马里奥吃到金币了数量会增多不会保持不变。那是应为Always一刻不停的在执行,刚吃到金币要加了又被执行了回来,而Start of Frame只在关卡开始时执行一次,后面就相当于这个金币设定不去管它了,所以会增加。
id: 45657493742
30L | 作者:dodoufatch | 发布于 2014-02-08 16:11
6- 时间间隔代码
利用Timer 做出该代码
语法:Every 时间
..........
例子:
Every 00''-01
Player 2: Add 1 to Score
意思是每0秒1毫秒(‘’为秒,-后面的为毫秒),给金币数量+1。
我们试着做一下。
删掉刚才那行代码(右键Delete),找空地new condition,然后选择那个时钟,右键后单击every,输入以下数字,然后OK,发现是Every 01''-20(每1.2秒)
然后按照惯例,点下面那行文字,然后找到Player2,右键-Score- Add to Score
输入1然后点OK,就完成了以下代码
Every 01''-20
Player 2: Add 1 to Score
测试关卡,我们发现每1.2秒金币数量+1。
id: 45657515880
31L | 作者:dodoufatch | 发布于 2014-02-08 16:11
今天暂时休息了,有什么疑问在下面回帖哦!
id: 45657730187
32L | 作者:刘明浩666666 | 发布于 2014-02-08 16:16
弱弱的问一句:想制作可以向8-3一样的向上走向下走怎么设置、、、
id: 45671556519
33L | 作者:RAFFICA | 发布于 2014-02-08 20:40
看上去像是类似vb的编程书,我试看看能否看懂
id: 45681787351
34L | 作者:水银龟 | 发布于 2014-02-08 23:15
你打那么多字不累么
id: 45698253944
35L | 作者:天蓝色的耀西 | 发布于 2014-02-09 10:28
果断没看懂好高级的样子,这哪是初级能看的?
id: 45700678800
36L | 作者:马里奥X7 | 发布于 2014-02-09 11:18
楼上的有一点说错了:应该是”-后第一位数为1毫秒,第二位数为分秒
id: 45723861384
37L | 作者:dodoufatch | 发布于 2014-02-09 19:16
今天不更了,明天补上今天的加明天的
id: 45773277122
38L | 作者:dodoufatch | 发布于 2014-02-10 16:38
开始啦!继续昨天的!(前天的在第一页,慢慢翻)
6- 控制播放代码初步接触
接下来我们接触几个和音乐有关的代码
音乐分为sample和music,Re里基本上是sample,sample可以放在各种各样的频道(channel)里,一个频道一次播放一个sample。现在我们尝试着做一个音乐
我们首先找空地(诀窍:鼠标左键单击一个数字,然后右键insert- a new line)可以直接插入
选择第一个电脑,然后点击Always。还是老规矩插入action。选择喇叭,右键,然后移到sample,选择Play and loop Sample on a specific channel,选择随意一个背景音乐(如果要自定义可以选择最下面一个file,然后转到你要的文件。最好为ogg格式,mp3格式不支持)然后再对话框中输入32,再输入0.就完成了以下代码:
Always
Play sample XXXXXX on channel #32, 0 times
这样测试关卡,发现背景音乐是这个音乐和另一个背景音乐混杂起来的(RE除外)。
这里只是给大家做个演示,因为每种引擎的音乐逻辑是不一样的,无法一一讲。
W10E是在音乐+通关处,把音乐=0下面的channel改一下,RE忘了。
接下来我们要让频道32停止。
删掉刚刚那个事件,再插入一个Always,然后选择喇叭--sample- stop channel,输入32,会发现正常情况下这个音乐会停止。
单击Always,右键Replace,在界面第一个电脑处右键选择Never,这样音乐就永远不会停止。
我们试着为频道32设置音量。
把Never改回Always,删掉那个stop channel,改为set chennel volume(方法:打开界面,右键喇叭-sample-- set channel volume)输入一个准确的音量就可以了。测试关卡看效果
id: 45773388189
39L | 作者:dodoufatch | 发布于 2014-02-10 16:40
7- 帧代码
帧代码为storyboard control类型。我们尝试着通过马里奥碰到板栗仔来跳到下一帧。
按照第三节的办法,弄好以下代码:
collision between Mario and 板栗
storyboard control(那个像棋盘一样的):Next Frame
测试关卡看效果。
其实我们还可以设置Jump to frame。一样的地方右键STORYBOARD CONTROL,选择jump to frame,选择一帧。这样,当马里奥碰到板栗的时候会跳到特定的界面了!
id: 45774093736
40L | 作者:dodoufatch | 发布于 2014-02-10 16:55
8- Test Position(比较坐标)
我们已经学过了X和Y坐标。接下来我们来学习比较坐标的一般方法。
比较坐标是作为条件出现的,语法格式为:
X position of Active(物品) 比较符 一个X坐标值
Y Position of Active 比较符 一个Y坐标值
比较符有等号(equal),不等(Different),不小于(Greater or equal),不大于(Lower orequal),小于(lower)和大于(greater)
一个X坐标值或Y坐标值可以是一个准确的数字,还可以是一个值。(例如此时帧最右边的X坐标、此时板栗仔的X坐标等等)
假设目前有创建了一个Active,我们来举个例子说明:
X position of Mario >= X(“active”)
Storyboard Control: Next Frame
此时,如果马里奥的X坐标不小于Active的X坐标,(即大于或者是等于)就去下一个界面。简单的说就是马里奥不在这个Active的左边时执行下面的代码。这个代码会一直执行直到帧的结束。
表示一个物体X坐标的语法为 X(“物体名”),Y坐标也是一样,是Y(“物体名”)
此时帧的最右侧可以表示为XRight Frame(这些全都可以用于强制滚屏,到时候会细讲!)
我们来体会一下这种用法
创建一个空的Active(方法应该都知道),重命名为“SBB”,放到关卡中适宜的地方。然后转移到event list editor,找空地插入新的条件。
我们单击代码马里奥的物品(W10E的如左图)
右键,选择Position,然后单击Test X Position to a value,在新的对话框中输入 X("SBB"),然后如左图,将上面的choose comparision methof中的equal换成Greater or equal(不小于),然后点击OK,就生成了一段代码。
然后我们在这个条件下面点击insert your action here,插入next frame(这个应该知道吧!)
完成了。我们测试关卡,发现MARIO一旦越过那个Active就会跳转界面
同样,我们双击那个X Position of Mario >=X(“SBB”),把X(“SBB”)换成100,测试关卡。
id: 45774117971
41L | 作者:dodoufatch | 发布于 2014-02-10 16:56
今天要过一会儿继续更了!
id: 45776893464
42L | 作者:dodoufatch | 发布于 2014-02-10 17:54
罢工
id: 45782082349
43L | 作者:刘明浩666666 | 发布于 2014-02-10 19:36
视频呢、、、等待视频中
第一章节以理论知识为主。